这一道题显然是一道 $RMQ$ 的题目,用一个三元素组$(o,l,r)$表示:左端点为o,右端点在l到r的区间内的最大子段,元素组用堆维护。
对于每个和弦的值,用前缀和在$O(1)$的时间复杂度求出。
$ans$累加这个三元组的贡献。由于$t$已经被选中,对于这个$o$,$t$已经不能重复选中,但最优解还可能存在于 $t$左右的两端区间中,所以提取出$(o, l, r)$之后,为了避免重复且不丧失其他较优解,我们仍然要把$(o, l, t - 1),(o, t + 1, r)$扔回堆里面去。还要避免重复或错误,即$l = t$或$r = t$的情况要进行特判。
对于$t$的位置,我们直接用ST表预处理出即可。
代码:
1 |
|
差不多就是这样了……
本文标题:【题解】 [NOI2010]超级钢琴 RMQ+优先队列 bzoj2006/洛谷P2048
文章作者:Qiuly
发布时间:2019年02月13日 - 00:00
最后更新:2019年03月29日 - 13:53
原始链接:http://qiulyblog.github.io/2019/02/13/[题解]luoguP2048/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。